// 给你一个二维整数数组 matrix， 返回 matrix 的 转置矩阵 。
// 矩阵的 转置 是指将矩阵的主对角线翻转，交换矩阵的行索引与列索引。

const transpose = function (matrix: number[][]): number[][] {
    const row = matrix.length;
    const col = matrix[0].length;
    const transposeMatrix: number[][] = new Array(col).fill(0)
        .map(() => new Array(row).fill(0));// 初始化转置矩阵
    for (let i = 0; i < col; i++) {
        for (let j = 0; j < row; j++) {
            // 转置矩阵的行列与原矩阵行列存在关系
            transposeMatrix[i][j] = matrix[j][i];
        }
    }
    return transposeMatrix;
};

transpose(
    [
        [1, 2, 3],
        [4, 5, 6]
    ]
)

// 这道题目严格来说算是一道数学题目
// 关键之处在于搞清楚矩阵的转置是什么意思
// 翻译成白话:转置矩阵就是把 M 行 N 列的矩阵，转成 N 行 M 列的矩阵，
// 原来矩阵中 matrix[i][j] 的位置，会交换到新矩阵的 res[j][i] 位置。
// 弄清楚后这道题目的编码难度就非常小了，可以留意一下在JS中初始化二维矩阵的方式
